package com.liuyi.netty.im.lychat.modular.service;

import com.liuyi.netty.im.lychat.modular.caches.UserFriendCache;
import com.liuyi.netty.im.lychat.modular.entity.UserFriend;
import com.liuyi.netty.im.lychat.modular.mapper.UserFriendMapper;
import com.liuyi.rapid.develop.mybatis.plus.base.IBaseService;

/**
 * <p>
 * 用户好友表 服务类
 * </p>
 *
 * @author mybatis-plus
 * @since 2021-12-29
 */
public interface IUserFriendService extends IBaseService<UserFriend> {

    @Override
    default Class<UserFriend> getEntityClass() {
        return UserFriend.class;
    }

    @Override
    @SuppressWarnings("unchecked")
    default UserFriendMapper getMapper() {
        return (UserFriendMapper) getBaseMapper();
    }

    UserFriendCache cache();

    /**
     * 验证好友关系
     *
     * @param userId       用户id
     * @param friendUserId 朋友的用户id
     * @return boolean
     */
    default boolean checkFriend(String userId, String friendUserId) {
        return count(q().eq(UserFriend.USER_ID, userId).eq(UserFriend.FRIEND_USER_ID, friendUserId)) > 0;
    }

    /**
     * 删除朋友
     *
     * @param userId       用户id
     * @param friendUserId 朋友的用户id
     */
    void delFriend(String userId, String friendUserId);

    /**
     * 创建好友关系
     * <pre>
     *     创建双向关系
     * </pre>
     *
     * @param userId       用户id
     * @param friendUserId 朋友的用户id
     */
    default void createFriend(String userId, String friendUserId) {
        createFriend(userId, friendUserId, true);
    }

    /**
     * 创建好友关系
     *
     * @param userId       用户id
     * @param friendUserId 朋友的用户id
     * @param twoway       是否创建双向关系
     */
    void createFriend(String userId, String friendUserId, boolean twoway);

    void wrapper(UserFriend userFriend);

    Object c2cProfile(String userId, String fiendUserId);
}
